package behavioral.template_method;

/**
 * @ClassName: AbstractCalculator
 * @Description: 抽象计算类：具体的计算,留给子类扩展,但算法流程步骤已经固定好
 * @Author: liu-hao
 * @Date: 2023-04-11 23:45
 * @Version: 1.0
 **/
public abstract class AbstractCalculator {

    // 模板方法，公共的算法流程：1.分离需要运算的参数；2.对分离出来的运算,做相对应的计算
    public final int calculate(String exp, String opt) {
        int array[] = split(exp, opt);
        return cal(array[0], array[1]);
    }

    // 算法中不变的部分，子类直接继承
    public int[] split(String exp, String opt) {
        String array[] = exp.split(opt);
        int arrayInt[] = new int[2];
        arrayInt[0] = Integer.parseInt(array[0]);
        arrayInt[1] = Integer.parseInt(array[1]);
        return arrayInt;
    }

    // 需要被子类具体实现的方法
    public abstract int cal(int num1, int num2);
}
